/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gamecomponents.skeletontesthelper;

import gamecomponents.levelcomponents.PerspectiveState;
import gamecomponents.levelcomponents.stagelements.buildingmats.Door;
import gamecomponents.levelcomponents.stagelements.buildingmats.ExtendedEntity;
import gamecomponents.levelcomponents.stagelements.buildingmats.Key;
import gamecomponents.levelcomponents.stagelements.buildingmats.Wall;
import gamecomponents.navigation.Direction;
import java.io.*;
import java.util.Scanner;

/**
 *
 * @author Akos
 */
public class BranchHelper
{
    
    /* 
     * Code Hard szkeleton teszteset választó
     * Válassz testesetet!
     * 0 - Perspektívaváltás
     * 1 - Blokk mozgatása
     * 2 - Halál
     * 3 - A figurával és környezetével történő szcenáriók
     * 4 - Inicializálás
     */
    void whichTest()
    {
        System.out.println(
                "Code Hard szkeleton teszteset választó\n"
                + "Válassz testesetet!\n\n"
                + "0 - Perspektívaváltás\n"
                + "1 - Blokk mozgatása\n"
                + "2 - Halál\n"
                + "3 - A figurával és környezetével történő szcenáriók\n"
                + "4 - Inicializálás\n\n\n"
                );
        Scanner in = new Scanner(System.in);
        int branch = -1;
        while (branch != 0 ||
               branch != 1 ||
               branch != 2 ||
               branch != 3 ||
               branch != 4)
            {

            branch = in.nextInt();
            if(branch != 0 ||
               branch != 1 ||
               branch != 2 ||
               branch != 3 ||
               branch != 4)
                System.out.println("Nincs ilyen lehetőség!\n");

            }

            switch (branch) {

                case 0 : zeroTestInitialPerState();
                         break;

                case 1 : firstTestActiveBlocksDirection();
                         break;

                case 2 : secondTestDeath();
                         break;

                case 3 : thirdTestAtBlocksEdge();
                         break;
                    
                case 4 : /* inicializálás*/;
                         break;

                default  : ;

            }
    }
    
    /* 
     * 0. teszteset: Perspektívaváltás
     * 1. elágazás
     * Milyen perspektívából kezdődjön a teszt?
     * 0 - Játékos nézet
     * 1 - Blokkváltós nézet
     */
    PerspectiveState zeroTestInitialPerState() //0. teszteset 1. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "0. teszteset: Perspektívaváltás\n"
                + "1. elágazás\n"
                + "Milyen perspektívából kezdődjön a teszt?\n\n"
                + "0 - Játékos nézet\n"
                + "1 - Blokkváltós nézet\n\n"
                );
        
    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {
                   
            case 0 : return PerspectiveState.PLAYERMOVING_MODE;
                
            case 1 : return PerspectiveState.BLOCKCHANGING_MODE;

            default  : return PerspectiveState.BLOCKCHANGING_MODE;
                
        }
    }
    
    /* 
     * 1. teszteset: Blokk mozgatása
     * 1. elágazás
     * Melyik irányba helyezkedjen el az üres blokkhoz képest?
     * 0 - Felette
     * 1 - Alatta
     * 2 - Tőle jobbra
     * 3 - Tőle balra
     */
    Direction firstTestActiveBlocksDirection() //1. teszteset 1. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                +"1. teszteset: Blokk mozgatása\n"
                + "1. elágazás\n"
                + "Melyik irányba helyezkedjen el az üres blokkhoz képest?"
                + "a másik blokk? \n\n"
                + "0 - Felette\n"
                + "1 - Alatta\n"
                + "2 - Tőle jobbra\n"
                + "3 - Tőle balra\n\n"
                );
        
        Scanner in = new Scanner(System.in);
        int branch = -1;
        while (branch != 0 ||
               branch != 1 ||
               branch != 2 ||
               branch != 3)
            {

            branch = in.nextInt();
            if(branch != 0 || branch != 1 || branch != 2 || branch != 3)
                System.out.println("Nincs ilyen lehetőség!\n");

            }

            switch (branch) {

                case 0 : return Direction.UP;

                case 1 : return  Direction.DOWN;

                case 2 : return  Direction.RIGHT;

                case 3 : return  Direction.LEFT;

                default  : return Direction.UP;

            }
    }
    
    /* 
     * 1. teszteset: Blokk mozgatása
     * 2. elágazás
     * Melyik irányba szimuláljuk a NEM üres blokk mozgatását?
     * 0 - Felfele
     * 1 - Lefele
     * 2 - Jobbra
     * 3 - Balra
     */
    Direction firstTestActiveBlocksMovingDirection() //1. teszteset 2. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                +"1. teszteset: Blokk mozgatása\n"
                + "2. elágazás\n"
                + "Melyik irányba szimuláljuk a NEM üres blokk mozgatását?\n\n"
                + "0 - Felfele\n"
                + "1 - Lefele\n"
                + "2 - Jobbra\n"
                + "3 - Balra\n\n"
                );
        
        Scanner in = new Scanner(System.in);
        int branch = -1;
        while (branch != 0 ||
               branch != 1 ||
               branch != 2 ||
               branch != 3)
            {

            branch = in.nextInt();
            if(branch != 0 || branch != 1 || branch != 2 || branch != 3)
                System.out.println("Nincs ilyen lehetőség!\n");
            }

            switch (branch)
            {

                case 0 : return Direction.UP;

                case 1 : return  Direction.DOWN;

                case 2 : return  Direction.RIGHT;

                case 3 : return  Direction.LEFT;

                default  : return Direction.UP;

            }
    }
    
    /* 
     * 2. teszteset: Halál
     * 1. elágazás
     * Vettünk-e már fel kulcsot?
     * 0 - Felvettünk
     * 1 - Nem vettünk fel
     */
    boolean secondTestDeath() //2. teszteset 1. elágazás
    {
         System.out.println(
                "//////////////////////////////////////////"
                + "2. teszteset: Halál\n"
                + "1. elágazás\n"
                + "Vettünk-e már fel kulcsot?\n\n"
                + "0 - Felvettünk\n"
                + "1 - Nem vettünk fel\n\n"
                );
        
    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {
                   
            case 0 : return true;
                
            case 1 : return false;

            default  : return true;
                
        }
    }
    
    /* 
     * 3. teszteset: A figurával és környezetével történő szcenáriók
     * 1. elágazás
     * Blokk szélén állunk-e?
     * 0 - Igen
     * 1 - Nem
     */
    boolean thirdTestAtBlocksEdge() //3. teszteset 1. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "3. teszteset: A figurával és környezetével történő szcenáriók\n"
                + "1. elágazás\n"
                + "Blokk szélén állunk-e?\n\n"
                + "0 - Igen\n"
                + "1 - Nem\n\n"
                );
        
    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {
                   
            case 0 : thirdTestBlockMatch();
                     return true;
                
            case 1 : thirdTestPlayerInteraction();
                     return false;

            default  : return true;
                
        }
    }
    
    /* 
     * 3. teszteset: A figurával és környezetével történő szcenáriók
     * 2. elágazás
     * Passzol-e a két blokk?
     * 0 - Igen
     * 1 - Nem
     */
    boolean thirdTestBlockMatch() //3. teszteset 2. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "3. teszteset: A figurával és környezetével történő szcenáriók\n"
                + "2. elágazás\n"
                + "Passzol-e a két blokk?\n\n"
                + "0 - Igen\n"
                + "1 - Nem\n\n"
                );

    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
        branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {

            case 0 : return true;

            case 1 : return false;

            default  : return true;

        }
    }
    
    /* 
     * 3. teszteset: A figurával és környezetével történő szcenáriók
     * 2. elágazás
     * Ha nem vagyunk a blokk szélén, akkor mire lépünk rá?
     * 0 - Kulcsra
     * 1 - Ajtóra
     * 2 - Falnak
     * 3 - Semmire
     */
    ExtendedEntity thirdTestPlayerInteraction() //3. teszteset 2. elágazás
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "3. teszteset: A figurával és környezetével történő szcenáriók\n"
                + "2. elágazás\n"
                + "Ha nem vagyunk a blokk szélén, akkor mire lépünk rá?\n\n"
                + "0 - Kulcsra\n"
                + "1 - Ajtóra\n"
                + "2 - Falnak\n"
                + "3 - Semmire\n\n"
                );

    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1 ||
           branch != 2 ||
           branch != 3)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1 || branch != 2 || branch != 3)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {

            case 0 : thirdTestKeysState();
                     return new Key();

            case 1 : thirdTestGotEnoughKeys();
                     return new Door();
                
            case 2 : return new Wall();
          
            case 3 : return null;

            default  : return new Key();

        }
    }
    
    /* 
     * "3. teszteset: A figurával és környezetével történő szcenáriók"
     * "3. elágazás"
     * "Fel van-e véve már a kulcs, melyre ráléptünk?"
     * "0 - Igen"
     * "1 - Nem"
     */
    boolean thirdTestKeysState() //3. teszteset 3. elágazás 
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "3. teszteset: A figurával és környezetével történő szcenáriók\n"
                + "3. elágazás\n"
                + "Fel van-e véve már a kulcs, melyre ráléptünk?\n\n"
                + "0 - Igen\n"
                + "1 - Nem\n\n"
                );
        
    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {
                   
            case 0 : return true;
                
            case 1 : return false;

            default  : return true;
                
        }
    }
    
    /* 
     * 3. teszteset: A figurával és környezetével történő szcenáriók
     * 3. elágazás
     * Van-e elegendő kulcs a figuránál?
     * 0 - Van
     * 1 - Nincs
     */
    boolean thirdTestGotEnoughKeys() //3. teszteset 3. elágazás 
    {
        System.out.println(
                "//////////////////////////////////////////"
                + "3. teszteset: A figurával és környezetével történő szcenáriók\n"
                + "3. elágazás\n"
                + "Van-e elegendő kulcs a figuránál?\n\n"
                + "0 - Van\n"
                + "1 - Nincs\n\n"
                );
        
    Scanner in = new Scanner(System.in);
    int branch = -1;
    while (branch != 0 ||
           branch != 1)
    {
        branch = in.nextInt();
        if(branch != 0 || branch != 1)
            System.out.println("Nincs ilyen lehetőség!\n");
    }
        switch (branch) {
                   
            case 0 : return true;
                
            case 1 : return false;

            default  : return true;
                
        }
    }
}